package com.nepu.gmall.realtime.util;

import com.alibaba.druid.pool.DruidPooledConnection;
import com.alibaba.fastjson.JSONObject;
import com.nepu.gmall.realtime.common.GmallConfig;
import org.apache.commons.lang.StringUtils;

import java.sql.PreparedStatement;
import java.util.Collection;
import java.util.Set;

/**
 * @author chenshuaijun
 * @create 2023-02-18 11:21
 */
public class PhoenixUtil {

    /**
     * 这里是将数据写入到Phoenix中
     * @param connection 这个是Phoenix的连接对象，来自于Druid的连接池
     * @param sinkTable 这个是我们的数据要写入的目标的表
     * @param data 这个是我们要写入的数据
     * @throws Exception 因为这个类是一个工具类，它之后是要被很多的类使用，所以这个里面出现的异常，在这个类里是解决不了的，我们需要将这个异常抛出去，然后让调用者去处理
     */
    public static void upsertData(DruidPooledConnection connection, String sinkTable, JSONObject data) throws Exception{
        // TODO 1、取出对应的key
        Set<String> keys = data.keySet();
        // TODO 2、取出对应的值
        Collection<Object> values = data.values();
        // TODO 3、拼接sql: upsert into db.table(id,name) values('1001','zhangsan')
        String sql = "upsert into " +
                GmallConfig.HBASE_SCHEMA +
                "." + sinkTable + "(" + StringUtils.join(keys,",") +
                ") " +
                "values ('" +
                StringUtils.join(values,"','") +
                "')";
        System.out.println("对应的SQL：" + sql);
        System.out.println("----------------5-------------------");
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.execute();
        // TODO 4、提交事务
        connection.commit();
        preparedStatement.close();
    }
}
